package com.atguigu.lambda;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * @author Jungle
 * @create 2024-01-06 21:51
 */
public class FunctionDemo {
    public static void main(String[] args) {
        // 1、定义数据提供过者函数
        Supplier<String> supplier = () -> "41a";
        // System.out.println(supplier.get());
        // 2、验证数据
        Predicate<String> isNumeric = str -> str.matches("-?\\d+(\\.\\d+)?");
        // System.out.println(isNumeric.test("777a"));

        // 3、转换器  把字符串转换为数字 简写  类::实例方法（静态方法）
        Function<String, Integer> change = Integer::parseInt;

        // 4、消费者，打印数字
        Consumer<Integer> consumer = integer -> {
            if (integer % 2 == 0) {
                System.out.println("偶数=>" + integer);
            } else {
                System.out.println("奇数=>" + integer);
            }
        };
        // consumer.accept(16);

        // 串在一起，实现判断42这个字符串是奇数还是偶数

        myMethod(isNumeric, supplier, consumer, change);


        myMethod(str->str.matches("-?\\d+(\\.\\d+)?"),()->"9999", System.out::println, Integer::parseInt);
    }



    /**
     * 我的方法
     */
    private static void myMethod(Predicate<String> isNumeric, Supplier<String> supplier, Consumer<Integer> consumer, Function<String, Integer> change) {
        if (isNumeric.test(supplier.get())) {
            consumer.accept(change.apply(supplier.get()));
            // 说明是一个数字
        } else {
            //说明不是一个数字
            System.out.println("非法的数字");
        }
    }
}
